import sys, os, io
input = io.BytesIO(os.read(0, os.fstat(0).st_size)).readline
n, k = map(int, input().split())
inf = pow(10, 12) + 1
ans = inf
for u in range(1, k):
if n % u:
continue
v = n // u
ans = min(ans, u + v * k)
print(ans)
#include <bits/stdc++.h>
using namespace std;
// #define forn(i, n) for (int i = 0; i < int(n); i++)
#define pb push_back
using ll =long long;
long long binconvert(int n)
{
long long bin = 0;
int rem, i = 1;
while (n!=0) {
rem = n % 2;
n /= 2;
bin += rem * i;
i *= 10;
}
return bin;
}
int arr[23];
void facto()
{arr[0]=1;
arr[1]=1;
arr[2]=2;
for(int i=3;i<=22;i++)
{
arr[i]=arr[i-1]+arr[i-2];
}
}
int gcd(int a,int b)
{
if(b==0)
{
return a;
}
return gcd(b,a%b);
}
int lcsub(string S,char K)
{
int currc = 0, prevc = 0, maxl;
for (int i = 0; i < S.size(); i++)
{
if (S[i] == K) {
currc += 1;
}
else {
prevc = max(prevc, currc);
currc = 0;
}
}
prevc = max(prevc, currc);
maxl = prevc;
return maxl;
}
ll sum(string s)
{
int sum1=0;
for(auto i:s)
{
sum1+=int(i-48);
}
return sum1;
}
void solve()
{
ll n,k;
cin>>n>>k;
for(int i=k-1;i>0;i--)
{
if(n%i==0)
{
cout<<i+(n/i)*k;
return;
}
}
}
int main() {
// freopen("input.txt","r",stdin);freopen("output.txt","w",stdout);
// facto();
int t=1;
//cin>>t;
while(t--)
{
solve();
}
}
1323B - Count Subrectangles | 991C - Candies |
1463A - Dungeon | 1671D - Insert a Progression |
1671A - String Building | 1671B - Consecutive Points Segment |
1671C - Dolce Vita | 1669G - Fall Down |
4D - Mysterious Present | 1316B - String Modification |
1204A - BowWow and the Timetable | 508B - Anton and currency you all know |
1672A - Log Chopping | 300A - Array |
48D - Permutations | 677C - Vanya and Label |
1583B - Omkar and Heavenly Tree | 1703C - Cypher |
1511C - Yet Another Card Deck | 1698A - XOR Mixup |
1702E - Split Into Two Sets | 1703B - ICPC Balloons |
1702F - Equate Multisets | 1700A - Optimal Path |
665C - Simple Strings | 1708A - Difference Operations |
1703E - Mirror Grid | 1042A - Benches |
1676B - Equal Candies | 1705B - Mark the Dust Sweeper |